#include "key.h"
#include "led.h"
#include "delay.h"

void Key_Int(){

    // 1. 开启GPIO时钟
    RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;
    // 2.开启AFIO时钟
    RCC->APB2ENR |= RCC_APB2ENR_AFIOEN;
    // 3.GPIO工作模式配置,输入，上拉/下拉输入 MODE: 00, CNF:10
    GPIOA->CRH &= ~GPIO_CRH_MODE15;
    GPIOA->CRH |= GPIO_CRH_CNF15_1;
    GPIOA->CRH &= ~ GPIO_CRH_CNF15_0;

    // 4.配置输出低电平
    GPIOA->ODR &= ~GPIO_ODR_ODR15;

    // 5.AFIO引脚复用选择
    AFIO->EXTICR[3] |= AFIO_EXTICR4_EXTI15_PA;

    // 6.配置EXTI
     //配置允许上升沿触发
     EXTI->RTSR |= EXTI_RTSR_TR15;
    //配置中断屏蔽寄存器，开放中断请求
    EXTI->IMR |= EXTI_IMR_MR15;


    // 7. NVIC配置
    //配置优先级组，全部都是抢占优先级
    NVIC_SetPriorityGrouping(3);
    NVIC_SetPriority(EXTI15_10_IRQn, 3);
    NVIC_EnableIRQ(EXTI15_10_IRQn);

}


//中断服务程序
void EXTI15_10_IRQHandler() {
    //先清除中断挂起标志位
    EXTI->PR |= EXTI_PR_PR15;
		LED_Toggle(LED_R);
		LED_Toggle(LED_G);
		LED_Toggle(LED_B);
	
//    Delay_ms(50);
//    if( (GPIOA->IDR & GPIO_IDR_IDR15) != 0) {
//        LED_On(LED_R);
//				LED_On(LED_G);
//				LED_On(LED_B);
//    }

}
